package it.unicam.ids.pvm.data;

import it.unicam.ids.pvm.distributore.Prodotto;

/**
 * La classe rappresenta un'interfaccia per la gestione dei prodotti contenuti
 * nella sorgente dati.
 * 
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 * 
 */
public interface ProdottoDAO {

	/**
	 * Il metodo consente di inserire un nuovo prodotto nella sorgente dati
	 * 
	 * @param prodotto
	 *            nuovo prodotto inserito.
	 * @throws DAOException
	 *             messaggio d'errore relativo all'inserimento del prodotto.
	 */

	public void insert(Prodotto prodotto) throws DAOException;

	/**
	 * Il metodo consente di aggiornare un prodotto esistente nella sorgente
	 * dati.
	 * 
	 * @param prodotto
	 *            prodotto coi valori aggiornati.
	 * @param oldCodice
	 *            codice del prodotto da aggiornare
	 * @throws DAOException
	 *             messaggio d'errore relativo all'aggiornamento del prodotto.
	 */

	public void update(Prodotto prodotto, String oldCodice) throws DAOException;

	/**
	 * Il metodo consente di eliminare un prodotto dalla sorgente dati
	 * 
	 * @param prodotto
	 *            prodotto da eliminare.
	 * @throws DAOException
	 *             messaggio d'errore relativo alla cancellazione del prodotto.
	 */

	public void delete(Prodotto prodotto) throws DAOException;

	/**
	 * Il metodo consente di recuperare tutti i prodotti contenuti nella
	 * sorgente dati
	 * 
	 * @return prodotti array di prodotti.
	 * @throws DAOException
	 *             messaggio d'errore relativo al recupero dei prodotti.
	 */

	public Prodotto[] findAllProdotti() throws DAOException;

	/**
	 * Il metodo consente di recuperare un particolare prodotto contenuto nella
	 * sorgente dati.
	 * 
	 * @param codice
	 *            codice univoco per ogni prodotto.
	 * @return prodotto prodotto cercato.
	 * @throws DAOException
	 *             messaggio d'errore relativo al recupero del prodotto.
	 */

	public Prodotto findByCodice(String codice) throws DAOException;

	/**
	 * Il metodo consente di verificare se un prodotto è associato ad una
	 * casella o meno.
	 * 
	 * @param codice
	 *            codice del prodotto da verificare.
	 * @return bool true se il prodotto è associato, false altrimenti.
	 * @throws DAOException
	 *             messaggio d'errore relativo alla verifica del prodotto.
	 */

	public boolean canDelete(String codice) throws DAOException;

}
